/*
 *                        _oo0oo_
 *                       o8888888o
 *                       88" . "88
 *                       (| -_- |)
 *                       0\  =  /0
 *                     ___/`---'\___
 *                   .' \\|     |// '.
 *                  / \\|||  :  |||// \
 *                 / _||||| -:- |||||- \
 *                |   | \\\  - /// |   |
 *                | \_|  ''\---/''  |_/ |
 *                \  .-\__  '-'  ___/-. /
 *              ___'. .'  /--.--\  `. .'___
 *           ."" '<  `.___\_<|>_/___.' >' "".
 *          | | :  `- \`.;`\ _ /`;.`/ - ` : | |
 *          \  \ `_.   \_ __\ /__ _/   .-` /  /
 *      =====`-.____`.___ \_____/___.-`___.-'=====
 *                        `=---='
 *
 *
 *      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 *
 *            佛祖保佑       永不宕机     永无BUG
 *
 * @Descripttion:
 * @version:
 * @Date: 2021-04-20 11:06:21
 * @Author: jekingxu@163.com
 * @LastEditTime: 2022-09-27 19:04:15
 * @Author: jekingxu@163.com
 * @HomePage: https://xuxiaowen.space/vue3-element-admin
 * @Github: https://github.com/xuxiaowengjt
 * 
 */

// 导入Vue 3核心模块和根组件
import { createApp } from 'vue'  // 创建Vue应用的核心函数
import App from './App.vue'  // 导入根组件
import axios from 'axios';  // 导入HTTP请求库

// 创建Vue应用实例
const app = createApp(App)

// 引入element-plus UI组件库及其样式
import ElementPlus from 'element-plus'  // Element Plus组件库
import './assets/style/element-variables.scss'  // Element Plus自定义主题变量

// 全局样式 在vite.config.js中引入了
// import './assets/style/global-variables.scss';

// 导入数据可视化相关库
import * as echarts from 'echarts'  // ECharts图表库，用于数据可视化
// import DataV from '@jiaminghi/data-view'  // DataV数据可视化组件库

// 全局挂载 ECharts，使其在任何组件中都可以通过this.$echarts访问
app.config.globalProperties.$echarts = echarts

// 导入 Highcharts
import Highcharts from 'highcharts'
// 设置全局 Highcharts 选项
Highcharts.setOptions({
  lang: {
    thousandsSep: ','
  }
})

// 全局注册Element Plus图标组件
import * as ICONS from '@element-plus/icons-vue'  // 导入所有Element Plus图标
Object.entries(ICONS).forEach(([key, component]) => {
    // app.component(key === 'PieChart' ? 'PieChartIcon' : key, component)  // 特殊处理PieChart图标
    app.component(key, component)  // 注册每个图标为全局组件
})

// 导入阿里图标
import '@/assets/AliIcon/iconfont.css'
// 注册SVG图标
import 'vite-plugin-svg-icons/register'  // 自动注册src/assets/svg下的所有SVG图标

// 导入并配置国际化模块
import i18n from '@/i18n'  // i18n国际化配置

// 导入路由配置
import router from './router'  // Vue Router路由管理器

// 导入状态管理库
import pinia from './pinia'  // Pinia状态管理库，Vue 3的新一代状态管理方案

// 导入权限控制模块
import './permission'  // 路由权限控制逻辑

// 新增图标
// import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
// import { fas } from '@fortawesome/free-solid-svg-icons'
// 注册图标库
// library.add(fas)

// 注册全局组件
import * as Components from './global-components'  // 导入所有全局组件
Object.entries(Components).forEach(([key, component]) => {
    app.component(key, component)  // 将组件注册为全局可用
})

// 注册全局自定义指令
import * as Directives from '@/directive'  // 导入所有自定义指令
Object.values(Directives).forEach(fn => fn(app))  // 注册每个自定义指令

// 配置错误日志处理
import useErrorHandler from './error-log'  // 导入错误日志处理模块
useErrorHandler(app)  // 初始化错误日志处理


// 导入Naive UI
// import naive from 'naive-ui' //用不了

// // 导入Toast UI
// import { BarChart } from '@toast-ui/vue-chart';
// // 注册全局组件
// app.component('BarChart', BarChart);

// 将 axios 挂载到 Vue 实例，使其在任何组件中都可以通过this.$axios访问
app.config.globalProperties.$axios = axios;

// 使用各种插件并挂载应用
app
    .use(i18n)         // 启用国际化
    .use(ElementPlus)  // 启用Element Plus组件库
    .use(pinia)        // 启用Pinia状态管理
    .use(router)       // 启用路由
    .mount('#app')     // 将应用挂载到#app节点  必须在最后


// 配置Service Worker实现PWA（渐进式Web应用）支持
if ('serviceWorker' in navigator) {  // 检查浏览器是否支持Service Worker
    window.addEventListener('load', () => {
        navigator.serviceWorker.register('./sw.js').then(registration => { //public会生成到根目录
            // console.log('Service Worker registered with scope:', registration.scope);
        }).catch(error => {
            // console.log('Service Worker registration failed:', error);
        });
    });
}